home *** CD-ROM | disk | FTP | other *** search
/ CD ROM Paradise Collection 4 / CD ROM Paradise Collection 4 1995 Nov.iso / bbs / jdrexa10.zip / INST4OF4.DAT / BBS / CONVERT.ZIP / CONVERT.BAS next >
BASIC Source File  |  1980-01-01  |  39KB  |  970 lines

  1. '
  2. ' Program to convert User and Messages from other BBS programs into the 
  3. ' JDR_BBS format.
  4. '
  5. ' If your BBS brand is not here, upload a copy of your user and message files
  6. ' to John and he will expand this to support that BBS format.  Call back the
  7. ' next day to get a revised copy of this program.
  8. '
  9.  
  10. 'This file was especially designed to be self-contained.  Not only should it
  11. 'compile with most Basic's, but it should be easily modifiable and portable.
  12.  
  13.  
  14. '
  15. ' Not converted: toggles/settings (ansi/width/protocol/etc.)
  16. ' (users)        attribute flags (deleted/etc.)
  17. '                high msg ptr's (last message read)
  18. '                time/dates (last on/etc.)
  19. '                time usage (used today, avail today, etc.)
  20. '                msg/conference/file area information
  21. '                hack attempts
  22. '                temporary stuff (DL's today/etc.)
  23. '                address or zip code fields (only city & state)
  24. '                note fields like sysop note, computer type
  25. '
  26. ' Not converted: time/date fields
  27. ' (messages)     attribute fields
  28. '                cost field
  29. '
  30. ' If any of these non-conversions are a problem, let me know and I'll
  31. ' fix it.
  32.  
  33.  
  34. DEFINT A-Z
  35. '
  36. '
  37. ' Create the data structures.
  38. '
  39. '
  40. ' UserRecord is the record structure of the USERS file.
  41. '
  42. TYPE UserRecord                    'Len = 384
  43.   UserName      AS STRING * 30     'Mixed case.
  44.   Password      AS STRING * 15     'Uppercase only.
  45.   CityState     AS STRING * 30     'Mixed case
  46.   SysopNote   AS LONG
  47.   UserNote    AS LONG
  48.   BirthDate     AS INTEGER         'Birthdate of user.
  49.                                    'Date stored in integer form.
  50.   SecLevel      AS INTEGER         '-32,767 to 32,767 security level.
  51.   FirstCall     AS INTEGER         'First date user called.
  52.                                    'Date stored in integer form.
  53.   Attr          AS INTEGER         '16 bits: see useredit.ans
  54.   Toggles       AS INTEGER         '16 bits:
  55.                                    '1 True if should beep after transfers.
  56.                                    '2 True if show Enter Msg line numbers.
  57.                                    '3 True if show Read Msg total lines.
  58.                                    '4 True if should "turbo" out the msgs.
  59.                                    '5 True if user is a male.
  60.                                    '6 True if password assist is on.
  61.                                    '7 True if want to see L&D/Point values.
  62.                                    'rest are used. this needs updating.
  63.   Protocol      AS STRING * 1      'User's procotol default.
  64.   Votes         AS STRING * 100    '=100 Voting questions (Byte answers).
  65.   SubsStart     AS INTEGER         'Subscription start date.
  66.                                    'Date stored in integer form.
  67.   Style         AS STRING * 3
  68.   ElapsedMinsC  AS INTEGER
  69.   ElapsedMins   AS INTEGER         'elapsed non-DL/UL mins of calls today.
  70.   LastCallerNum AS LONG
  71.   LastDateOn    AS INTEGER         'Last time user called.
  72.                                    'Date stored in integer form.
  73.   PswdChange    AS STRING * 1      'Counter towards user change password order.
  74.                                    '0 = off, 1 to 255 ascii value.
  75.   AlterDate     AS INTEGER         'The last date in which they exercised
  76.                                    'their Life & Death options.
  77.                                    'Date stored in integer form.
  78.   Toggles2      AS INTEGER         '16 bits:
  79.   PRStuff       AS STRING * 8      'Peer Review information.
  80.   Connect       AS STRING * 1      'Last baud user connected at.
  81.   NewFilesPtr   AS LONG            '0 to 2,100,000,000
  82.                                    'What the "NewFilesPtr" number was at the last
  83.                                    'time they called, any stuff with
  84.                                    'numbers higher is new to them.
  85.   HighestPtr    AS LONG            '0 to 2,100,000,000 Highest HileFilePtr they
  86.                                    'know about.  NewFilesPtr is call
  87.                                    'dependant--it's updated after they log out,
  88.                                    'this isn't--this is a security measure.
  89.   PagedSysop    AS INTEGER         '0 to 32,767 Number of times they've tried to
  90.                                    'page the sysop.
  91.   Logons        AS INTEGER         '0 to 32,767 Number of logons.
  92.   Attempts      AS STRING * 1      '0 to 255 Number of bad password attempts
  93.                                    'since their last call.
  94.   MinCredits    AS INTEGER         '-32,767 to 32,767
  95.                                    'Number of minutes to add to their daily
  96.                                    'that their security level gets.
  97.   MinMegs       AS INTEGER         '-32,767 to 32,767
  98.                                    'This number is multiplied by 1 megabyte
  99.                                    'and then added to their "number of
  100.                                    'bytes can download" to determine what
  101.                                    'their download bytes limit is.
  102.   MsgsPosted    AS INTEGER         '0 to 32,767 Total number of public messages
  103.                                    '(excluding NetMail) they've posted.
  104.   EMsgsPosted   AS INTEGER         '0 to 32,767 Total number of private
  105.                                    '(excluding feedback and NetMail) messages
  106.                                    'they've posted.
  107.   FMsgsPosted   AS INTEGER         '0 to 32,767 Total number of feedback
  108.                                    'messages they've posted.
  109.   NetMailSent   AS INTEGER         '0 to 32,767 Total number of NetMail letters
  110.                                    'they've sent.
  111.   NetMailRcvd   AS INTEGER         '0 to 32,767 Total number of NetMail letters
  112.                                    'they've received.
  113.   Elapsed       AS INTEGER         '0 to 32,767 Length of previous call(s).
  114.                                    'Never exceeds maximum daily limit for
  115.                                    'whatever security level.
  116.                                    'Download minutes.
  117.   Dnlds         AS INTEGER         '0 to 32,767 Total files downloaded.
  118.   DLBytes       AS LONG            '0 to 2,100,000,000 Total bytes downloaded.
  119.   MinsDLing     AS LONG            '0 to 2,100,000,000 Total number of minutes
  120.                                    'downloading.
  121.   BadDLs        AS INTEGER         '0 to 32,767 Total number of bad DL's.
  122.   Uplds         AS INTEGER         '0 to 32,767 Total files uploaded.
  123.   ULBytes       AS LONG            '-'ve to 2,100,000,000 Total bytes uploaded.
  124.   MinsULing     AS LONG            '0 to 2,100,000,000 Total number of minutes
  125.                                    'uploading.
  126.   BadULs        AS INTEGER         '0 to 32,767 Total number of bad UL's.
  127.   Doors         AS INTEGER         '0 to 32,767 Number of accesses to doors.
  128.   SubsEnd       AS INTEGER         'Date subscription ends.
  129.   HighNotePtr AS LONG
  130.   TotalMonies AS LONG              'total money they've sent.
  131.   LastMonies  AS LONG               'last amount they sent
  132.   Attr2       AS INTEGER
  133.   BytesUToday AS LONG         'use date of last call to determine if current
  134.                               'call means to zero this field.
  135.   BytesUWeek  AS LONG          'this will have to be a weekly event.
  136.                               'problem if user on another node when this 
  137.                               'executes.
  138.   MsgsRcvd    AS INTEGER      'Number of normal messages TO: and read.
  139.   EMsgsRcvd   AS INTEGER      'Number of private messages TO: and read.
  140.   SLSubsEnds  AS INTEGER
  141.   ScreenSize  AS STRING * 1
  142.   MsgRC       AS STRING * 10         'ansi code for reading messages.
  143.   Language    AS STRING * 1
  144.   RealName    AS STRING * 30         'mixed case
  145.   HomePhone     AS STRING * 17
  146.   BBSPhone      AS STRING * 17
  147. END TYPE
  148.  
  149.  
  150. '
  151. ' FeatherNet user record.
  152. '
  153. TYPE FeNUserRecord                'Len = 400
  154.   RealName    AS STRING * 25     'First & Last Name
  155.   CityState   AS STRING * 24     'City & State
  156.   Password    AS STRING * 12     'Password
  157.   BBSPhone    AS STRING * 13     'Business/Data Phone Number
  158.   HomePhone   AS STRING * 13     'Voice/Home Phone Number
  159.   LastDateOn  AS STRING * 6      'Last Date on in (yymmdd) format
  160.   LastTImeOn  AS STRING * 5      'Last Logon Time in (hh:mm) format
  161.   Expert      AS STRING * 1      'Expert Mode (y or n)
  162.   Protocol    AS STRING * 1      'Protocol Type
  163.   Future1     AS STRING * 1      '(- Reserved for future use- )
  164.   LastDirDate AS STRING * 6      'Last DIR look date (yymmdd) format
  165.   SecLevel    AS STRING * 1      'Sec Lev
  166.   Logons      AS INTEGER         'Number of times on System
  167.   ScreenSize  AS STRING * 1      'Page Length
  168.   Uplds       AS INTEGER         'Number of Uploads
  169.   Dnlds       AS INTEGER         'Number of Downloads
  170.   DLdBToday   AS STRING * 8      'Daily Download Bytes so Far
  171.   UserName    AS STRING * 25     'Alias Name
  172.   MsgsPosted1 AS INTEGER         'Messages left in long integer format.
  173.   MsgsPosted2 AS INTEGER
  174.   SysopNote   AS STRING * 29     'Sysop Maintained Comment
  175.   Attr        AS STRING * 1
  176.   Elapsed     AS INTEGER         'Elapsed Time on System for that Day
  177.   SubsStart   AS STRING * 6      'Subscription Registration Date (yymmdd)
  178.   SubsEndSL   AS STRING * 1      'Subscription Expired Sec Lev
  179.   LastConf    AS STRING * 1      'Conference the user last joined
  180.   BitMaps     AS STRING * 15
  181.   DLBytes     AS LONG            'Total Bytes Downloaded - all calls
  182.   DLBytes2    AS LONG            'Total Bytes Downloaded - all calls
  183.   ULBytes     AS LONG            'Total Bytes Uploaded - all calls
  184.   ULBytes2    AS LONG            'Total Bytes Uploaded - all calls
  185.   DeleteFlag  AS STRING * 1      'Delete Flag (y or n)
  186.   LastMsgArea AS LONG            'Last Read Message Area 0 (Main)
  187.   LastReads   AS STRING * 156    'This range of bytes  contain  the  last  message
  188.   Pointer     AS INTEGER         'Pointer to FNEXTUSR/FNUSERS.INF/COSYSOP.BIT recs
  189.   BirthDate   AS INTEGER         'Birthdate crunched into an interger.
  190.   Future2     AS STRING * 11     '(- Reserved for future use -)
  191. END TYPE
  192. '
  193. ' Spitfire 3.1 user record.
  194. '
  195. TYPE SFUserRecord                'Len = 315
  196.   LenUserName      AS STRING * 31
  197.   LenCallingFrom   AS STRING * 31
  198.   LenPassword      AS STRING * 15
  199.   LenTimeDate      AS STRING * 15
  200.   LenPhoneNumber   AS STRING * 13
  201.   LenBirthDate     AS STRING * 9
  202.   SecurityLevel    AS INTEGER
  203.   Uploads          AS LONG
  204.   Downloads        AS LONG
  205.   TotalUK          AS LONG
  206.   TotalDK          AS LONG
  207.   TimesOn          AS INTEGER
  208.   TimeLeft         AS INTEGER
  209.   LastMConf        AS INTEGER
  210.   LastFArea        AS INTEGER
  211.   TransPro         AS INTEGER
  212.   Defaults         AS STRING * 1
  213.   LenFirstLogDate  AS STRING * 9
  214.   SubscriptionDate AS LONG
  215.   ConfQueue        AS STRING * 32
  216.   ExtraBytes       AS STRING * 75
  217.   AllowPurge       AS STRING * 1
  218.   BadLastOff       AS STRING * 1
  219.   ScrollBack       AS STRING * 1
  220.   Xpert            AS STRING * 1
  221.   LockedOut        AS STRING * 1
  222.   Deleted          AS STRING * 1
  223.   Linelen          AS STRING * 1
  224.   Pagelen          AS STRING * 1
  225.   OnToday          AS STRING * 1
  226.   Illegal          AS STRING * 1
  227.   DLToday          AS STRING * 1
  228.   ForeGround       AS STRING * 1
  229.   ExtraWord        AS INTEGER
  230.   DLBytes          AS LONG
  231.   LenNewFCheck     AS STRING * 9
  232.   OrgSecurity      AS INTEGER
  233.   ChatsToday       AS INTEGER
  234.   Extra            AS STRING * 21
  235. END TYPE
  236. '
  237. ' Renegade 12-25-93 user record.
  238. '
  239. TYPE RGUserRecord                'Len = 1567
  240.   LenAlias     AS STRING * 37    '/* user name */
  241.   LenRealName  AS STRING * 37    '/* real name */
  242.   LenPassword  AS STRING * 21    '/* user password */
  243.   LenPhone     AS STRING * 13    '/* user phone # */
  244.   LenBirthDate AS STRING * 9     '/* user birthdate */
  245.   LenFirstCall AS STRING * 9     '/* firston date */
  246.   LenLastOn    AS STRING * 9     '/* laston date */
  247.   LenAddress   AS STRING * 31    '/* mailing address */
  248.   LenCityState AS STRING * 31    '/* city, state */
  249.   LenZipCode   AS STRING * 11    '/* zipcode */
  250.   LenComputer  AS STRING * 36    '/* type of computer */
  251.   LenJob       AS STRING * 36    '/* occupation */
  252.   LenBBSRef    AS STRING * 36    '/* BBS reference */
  253.   LenSysopNote AS STRING * 36    '/* SysOp note */
  254.   LenMenu      AS STRING * 9     '/* menu to start user out on */
  255.   LenLockOut   AS STRING * 9     '/* lockout msg to print */
  256.   Toggles      AS STRING * 2     '/* flags (see above) */
  257.   Attr         AS STRING * 3     '/* user flags */
  258.   ARFlags      AS STRING * 4     '/* AR flags */
  259.   VoteData     AS STRING * 25    '/* voting data */
  260.   Gender       AS STRING * 1     '/* user sex */
  261.   TotalMins    AS LONG           '/* total mins spent on */
  262.   ULBytesK     AS LONG           '/* amount ULed (kilobytes) */
  263.   DLBytesK     AS LONG           '/* amount DLed (kilobytes) */
  264.   MinsLeft     AS INTEGER        '/* # min left today */
  265.   FwdToUserNum AS INTEGER        '/* forward mail to user # */
  266.   FilePoints   AS INTEGER        '/* # of file points */
  267.   Uplds        AS INTEGER        '/* # of ULs */
  268.   Dnlds        AS INTEGER        '/* # of DLs */
  269.   Logons       AS INTEGER        '/* # times logged on */
  270.   MsgsPosted   AS INTEGER        '/* # public posts */
  271.   EMsgsPosted  AS INTEGER        '/* # private posts */
  272.   FeedbackSent AS INTEGER        '/* # feedback posts */
  273.   BankedMins   AS INTEGER        '/* # mins in Time Bank */
  274.   BankedToday  AS INTEGER        '/* time added to timebank TODAY */
  275.   DLKBToday    AS INTEGER        '{ # kbytes dl today}
  276.   FilesToday   AS INTEGER        '{ # files dl today }
  277.   MailWaiting  AS STRING * 1     '{ mail waiting     }
  278.   LineLength   AS STRING * 1     '/* line length (# cols) */
  279.   PageLength   AS STRING * 1     '/* page length (# rows) */
  280.   TimesOnToday AS STRING * 1     '/* # times on today */
  281.   Attempts     AS STRING * 1     '/* # illegal logon attempts */
  282.   Barf         AS STRING * 1     '
  283.   LastMsgBase  AS STRING * 1     '/* last message base # */
  284.   LastFileBase AS STRING * 1     '/* last file base # */
  285.   SecLevel     AS STRING * 1     '/* SL */
  286.   DSL          AS STRING * 1     '/* DSL */
  287.   LastRead     AS STRING * 1000  '/* NewScan high message pointers */
  288.   MBasesTogs   AS STRING * 32    '/* NewScan message bases */
  289.   FBasesTogs   AS STRING * 32    '/* NewScan file bases */
  290.   Colors       AS STRING * 20    '/* user colors */
  291.   Garbage      AS STRING * 1
  292.   TimeBankWith AS INTEGER        '{ amount of time withdrawn today}
  293.   PassWordCh   AS INTEGER        '{ last day password changed }
  294.   DefArcType   AS STRING * 1     '{ default QWK archive type }
  295.   LastConf     AS STRING * 1     '{ last conference they were in }
  296.   LastQwk      AS LONG           '{ date/time of last qwk packet }
  297.   GetOwnQwk    AS STRING * 1     '{ add own messages to qwk packet? }
  298.   ScanFilesQwk AS STRING * 1     '{ scan file bases for qwk packets? }
  299.   PrivateQwk   AS STRING * 1     '{ get private mail in qwk packets? }
  300.   Credit       AS LONG           '{ Amount of credit a user has }
  301.   Debit        AS LONG           '{ Amount of debit a user has }
  302.   Expire       AS LONG           '{ Expiration date of this user }
  303.   ExpireSL     AS STRING * 1     '{ Subscription level to expire to }
  304.   Colors2      AS STRING * 1     '{ User's color scheme # }
  305.   TeleConfEcho AS STRING * 1     '{ echo Teleconf lines? }
  306.   TeleConfInt  AS STRING * 1     '{ interrupt during typing? }
  307. END TYPE
  308. '
  309. ' RemoteAccess 1.11 user record.
  310. '
  311. TYPE RAUserRecord                'Len = 158
  312.   LenName       AS STRING * 36
  313.   LenLocation   AS STRING * 26
  314.   LenPassword   AS STRING * 16
  315.   LenDataPhone  AS STRING * 13
  316.   LenVoicePhone AS STRING * 13
  317.   LenLastTime   AS STRING * 6
  318.   LenLastDate   AS STRING * 9
  319.   Attr          AS STRING * 1
  320.   Flags         AS STRING * 4
  321.   Credit        AS INTEGER
  322.   Pending       AS INTEGER
  323.   MsgsPosted    AS INTEGER
  324.   LastRead      AS INTEGER
  325.   Security      AS INTEGER
  326.   NoCalls       AS INTEGER
  327.   Uploads       AS INTEGER
  328.   Downloads     AS INTEGER
  329.   UploadsK      AS INTEGER
  330.   DownloadsK    AS INTEGER
  331.   TodayK        AS INTEGER
  332.   Elapsed       AS INTEGER
  333.   ScreenLength  AS INTEGER
  334.   LastPwdChange AS STRING * 1
  335.   Toggles       AS STRING * 1
  336.   Group         AS STRING * 1
  337.   XIrecord      AS INTEGER
  338.   ExtraSpace    AS STRING * 3
  339. END TYPE
  340. '
  341. '
  342. ' MessageRecord is the record structure used for each messages header in
  343. ' the MESSAGES.HDR file.
  344. '
  345. TYPE MessageRecord               'Len = 136
  346.   Attr          AS INTEGER       '16 bits:
  347.                                  '1 True if a deleted message.
  348.                                  '2 True if Msg body is compressed.
  349.                                  '3 True if this is a reply.
  350.                                  'x True if NetMail
  351.                                  'x True if shouldn't ever NetMail out.
  352.                                  '5 True if shouldn't ever Auto delete.
  353.                                  'x True if should never delete at all.
  354.                                  '8 True if redirected from sysop.
  355.                                  '9 True if redirected from AI.
  356.                                  '10 True if redirected to sysop.
  357.                                  '11 True if redirected to AI.
  358.                                  '12 True if there are file attaches.
  359.                                  '13 True if message will be completed later.
  360.                                  '14 True if any file attaches are free.
  361.                                  '16 True if want's RR (temporary until NetMail)
  362.                                  'Rest are for the future.
  363.   MsgNum        AS LONG          '1 to 2,100,000,000 message number.
  364.                                  'Each message base has it's own message
  365.                                  'counter.
  366.   MsgFrom       AS STRING * 30   'Name of sender.  Mixed case.
  367.   MsgTo         AS STRING * 30   'Name of receiver or "ALL".  Mixed case.
  368.   MsgDateSent   AS INTEGER       'Date message was sent.
  369.                                  'Date stored in integer form.
  370.   MsgTimeSent   AS INTEGER       'Time stored in integer form.
  371.                                  'HHMM and +/-'ve depending on am/pm.
  372.   MsgDateRcvd   AS INTEGER       'Date message was received.  0 if not
  373.                                  'received or sent to "ALL".
  374.                                  'Date stored in integer form.
  375.   MsgTimeRcvd   AS INTEGER       'Time stored in integer form.
  376.                                  'HHMM and +/-'ve depending on am/pm.
  377.   NumOfBytes    AS INTEGER       'Doesn't exceed 16384, message length.
  378.   NumberReplies AS STRING * 1    'This message has been replied to x times.
  379.                                  'This is not the number of active replies.
  380.   TimesRead     AS INTEGER       'Number of times this message has been read.
  381.   LastDateRead  AS INTEGER       'last date anybody read the message.
  382.   MsgSubject    AS STRING * 33   'Compressed text--message subject.
  383.   MsgBase       AS INTEGER       '0 - 32,767 Message bases.
  384.   x             AS INTEGER       'not used
  385.   Attr2         AS INTEGER       'not used, save for future attr2
  386.   SourceAddr    AS STRING * 6    'NetMail source address.
  387.   DestAddr      AS STRING * 6    'NetMail destination address.
  388.   MsgLoc        AS LONG
  389. END TYPE
  390. '
  391. ' FeatherNet Pro 1.01 message header record.
  392. '
  393. TYPE FeNMsgHeaderRec              'Len = 128
  394.   Status1    AS STRING * 1       'Status Flag
  395.   MsgNum     AS INTEGER          'Message Number (1 to 9,999,999)
  396.   MsgNum2    AS INTEGER
  397.   RefNum     AS LONG             'Reference Message Number (1 to 9,999,999)
  398.   MsgBlkSize AS STRING * 1       'Number of 128 byte blocks in the message
  399.   DateSent   AS STRING * 8       'Date of message as (mm-dd-yy)
  400.   TimeSent   AS STRING * 5       'Time of Message as (hh:mm)
  401.   MsgTo      AS STRING * 25      'Who the Message is For
  402.   ReplyDate  AS LONG             'Date of reply message as (yymmdd)
  403.   LastReply  AS STRING * 5       'Time of last reply message
  404.   HasReplies AS STRING * 1       'The letter "R" if an "ALL" msg. has reply(s)
  405.   MsgFrom    AS STRING * 25      'Who the Message is From
  406.   MsgSubject AS STRING * 25      'The Subject of the Message
  407.   Password   AS STRING * 12      'Password of the Message (Not Used)
  408.   Status2    AS STRING * 1       'chr$(225) for active or chr$(226) for inactive
  409.   Status3    AS STRING * 1       'The letter "E" if message is to be echoed
  410.   Attaches   AS INTEGER          '(Record in the Conf attach database for file)
  411.   Future     AS STRING * 4       '(Reserved  for future use)
  412. END TYPE
  413. '
  414. ' Spitfire 3.1 message header record.
  415. '
  416. TYPE SFMsgHeaderRec              'Len = 256
  417.   LenMDate        AS STRING * 18
  418.   LenFromWho      AS STRING * 31
  419.   LenToWho        AS STRING * 31
  420.   LenOrgTo        AS STRING * 31
  421.   LenSubject      AS STRING * 41
  422.   NetMail         AS STRING * 1
  423.   MsgSent         AS STRING * 1
  424.   PurgeWhenSent   AS STRING * 1
  425.   ThreadMsg       AS STRING * 1
  426.   ThreadStart     AS STRING * 1
  427.   Private         AS STRING * 1
  428.   Deleted         AS STRING * 1
  429.   Received        AS STRING * 1
  430.   Where           AS INTEGER
  431.   NumberofRecords AS INTEGER
  432.   Conference      AS INTEGER
  433.   MsgNumber       AS LONG
  434.   OrgMsgNumber    AS LONG
  435.   Extra           AS STRING * 82
  436. END TYPE
  437. '
  438. ' Renegade 12-25-93 message header record.
  439. '
  440. TYPE RGMsgHeaderRec              'Len = 326
  441.   FAnonFlag  AS STRING * 1       '/* anonymous type (0=no, 1/2=yes, 3="Abby", */
  442.   FUserRec   AS INTEGER          '/* user number (0=none) */
  443.   FLenHandle AS STRING * 37      '/* user name (all caps) if anon=3..5, */
  444.   FLenName   AS STRING * 37      '/* user real name (all caps) */
  445.   FLenAlias  AS STRING * 37      '/* user alias (all caps) */
  446.   FZone      AS INTEGER          '/* zone (0=none) */
  447.   FNet       AS INTEGER          '/* net (0=none) */
  448.   FNode      AS INTEGER          '/* node (0=none) */
  449.   FPoint     AS INTEGER          '/* point (0=none) */
  450.   TAnonFlag  AS STRING * 1       '/* anonymous type (0=no, 1/2=yes, 3="Abby", */
  451.   TUserRec   AS INTEGER          '/* user number (0=none) */
  452.   TLenHandle AS STRING * 37      '/* user name (all caps) if anon=3..5, */
  453.   TLenName   AS STRING * 37      '/* user real name (all caps) */
  454.   TLenAlias  AS STRING * 37      '/* user alias (all caps) */
  455.   TZone      AS INTEGER          '/* zone (0=none) */
  456.   TNet       AS INTEGER          '/* net (0=none) */
  457.   TNode      AS INTEGER          '/* node (0=none) */
  458.   TPoint     AS INTEGER          '/* point (0=none) */
  459.   TextPtr    AS LONG             '/* pointer to message text */
  460.   MsgLength  AS INTEGER          '/* length of message text */
  461.   ReplyTo    AS INTEGER          '{ message it's a reply to }
  462.   Date       AS LONG             '{ date/time packed string }
  463.   DayOfWeek  AS STRING * 1       '{ message day of week     }
  464.   Status     AS STRING * 1       '{ message status flags    }
  465.   Replies    AS INTEGER          '{ times replied to        }
  466.   LenSubject AS STRING * 41      '{ subject of message      }
  467.   LenOrgDate AS STRING * 20      '{ date of echo/group msgs }
  468.   FileAttach AS STRING * 1       '{ 0=No, 1=Yes&Del, 2=Yes&Save }
  469.   NetAttr    AS INTEGER          '{ Netmail attributes }
  470.   Res        AS STRING * 2       '{ reserved }
  471. END TYPE
  472. '
  473. ' RemoteAccess 1.11 message header record.
  474. '
  475. TYPE RAMsgHeaderRec              'Len = 187
  476.   MsgNum      AS INTEGER
  477.   PrevReply   AS INTEGER
  478.   NextReply   AS INTEGER
  479.   TimesRead   AS INTEGER
  480.   StartBlock  AS INTEGER
  481.   NumBlocks   AS INTEGER
  482.   DestNet     AS INTEGER
  483.   DestNode    AS INTEGER
  484.   OrigNet     AS INTEGER
  485.   OrigNode    AS INTEGER
  486.   DestZone    AS STRING * 1
  487.   OrigZone    AS STRING * 1
  488.   Cost        AS INTEGER
  489.   MsgAttr     AS STRING * 1
  490.   NetAttr     AS STRING * 1
  491.   Board       AS STRING * 1
  492.   LenPostTime AS STRING * 6
  493.   LenPostDate AS STRING * 9
  494.   LenWhoTo    AS STRING * 36
  495.   LenWhoFrom  AS STRING * 36
  496.   LenSubject  AS STRING * 73
  497. END TYPE
  498.  
  499.  
  500. DECLARE FUNCTION Adjust$ (st$)
  501.  
  502.  
  503. COMMON SHARED _
  504.   User AS UserRecord, _
  505.   FeNUser AS FeNUserRecord, _
  506.   SFUser AS SFUserRecord, _
  507.   RGUser AS RGUserRecord, _
  508.   RAUser AS RAUserRecord, _
  509.   Message AS MessageRecord, _
  510.   FeNMsg AS FeNMsgHeaderRec, _
  511.   SFMsg AS SFMsgHeaderRec, _
  512.   RGMsg AS RGMsgHeaderRec, _
  513.   RAMsg AS RAMsgHeaderRec
  514.  
  515.  
  516. '
  517. ' Start of actual code.
  518. '
  519. CLS
  520. PRINT
  521. PRINT "This program converts the users and messages of other BBS programs to JDR_BBS"
  522. PRINT "format.  The USERS.HDR file is created new, but MESSAGES.HDR is appended onto."
  523. PRINT
  524. PRINT "  *All files must be in the current directory.*      *Make backups.*"
  525. PRINT
  526. PRINT "     FROM                                             TO"
  527. PRINT "* 1. Spitfire 3.1 SFUSERS.DAT                         JDR_BBS .10 USERS.HDR"
  528. PRINT "* 2. FeatherNet Pro 1.01 USERS                        JDR_BBS .10 USERS.HDR"
  529. PRINT "* 3. RemoteAccess 1.11 USERS.BBS                      JDR_BBS .10 USERS.HDR"
  530. PRINT "  4. Renegade 12-25-93 USERS.DAT                      JDR_BBS .10 USERS.HDR"
  531. PRINT "* 5. Spitfire 3.1 SFMSGxx.PTR/SFMSGxx.DAT             JDR_BBS .10 MESSAGES.*"
  532. PRINT "* 6. FeatherNet Pro 1.01 MSGS                         JDR_BBS .10 MESSAGES.*"
  533. PRINT "* 7. RemoteAccess 1.11 MSGHDR.BBS/MSGTXT.BBS          JDR_BBS .10 MESSAGES.*"
  534. PRINT "  8. Renegade 12-25-93 msgarea.HDR/msgarea.DAT        JDR_BBS .10 MESSAGES.*"
  535. PRINT "*These have not yet been tested."
  536. PRINT
  537. PRINT "If the conversion doesn't work, or is not to your liking, tell me and I will"
  538. PRINT "fix the problem, and put up a working/better version the next day on my BBS."
  539. PRINT
  540. PRINT "Do which [1..8]";
  541. INPUT K
  542. PRINT
  543. SELECT CASE K
  544.   CASE 1 TO 4
  545.        PRINT
  546.        PRINT "Hit <esc> if things start looking bad, then tell John whats wrong."
  547.        PRINT
  548.        PRINT "Handle/Alias name              Real name"
  549.        PRINT "------------------------------ ------------------------------"
  550.   CASE 5 TO 8
  551.        PRINT
  552.        PRINT "Hit <esc> if things start looking bad, then tell John whats wrong."
  553.        PRINT
  554.        PRINT "From                           To"
  555.        PRINT "------------------------------ ------------------------------"
  556. END SELECT
  557. SELECT CASE K
  558.   CASE 1 : CALL SFtoJDR
  559.   CASE 2 : CALL FeNtoJDR
  560.   CASE 3 : CALL RAtoJDR
  561.   CASE 4 : CALL RGtoJDR
  562.   CASE 5 : CALL SFMsgToJDR
  563.   CASE 6 : CALL FeNMsgToJDR
  564.   CASE 7 : PRINT "Working...";
  565.            CALL RAMsgToJDR
  566.   CASE 8 : CALL RGMsgToJDR
  567. END SELECT
  568. SELECT CASE K
  569.   CASE 1 TO 4
  570.        PRINT "Done."
  571.        PRINT
  572.        PRINT "Please delete your INDEXES\USERS.IDX file if it had previously existed."
  573.        PRINT "Copy USERS.HDR to GLOBAL\SYSTEM\ for use."
  574.   CASE 5 TO 8
  575.        PRINT "Done."
  576.        PRINT
  577.        PRINT "Please delete your INDEXES\MSGS_*.IDX files if they had previously existed."
  578.        PRINT "Copy MESSAGES.* to GLOBAL\SYSTEM\ for use."
  579. END SELECT
  580. END
  581.  
  582.  
  583. SUB FeNtoJDR
  584. OPEN "USERS" FOR BINARY AS #1
  585. OPEN "USERS.HDR" FOR BINARY AS #2
  586. CALL InitNewUser
  587. FOR K0 = 1 TO LOF(1) \ 400
  588.   GET #1,,FeNUser
  589.   User.RealName   = FeNUser.RealName
  590.   User.CityState  = FeNUser.CityState
  591.   User.Password   = FeNUser.Password
  592.   User.BBSPhone   = FeNUser.BBSPhone
  593.   User.HomePhone  = FeNUser.HomePhone
  594.   User.Protocol   = FeNUser.Protocol
  595.   User.SecLevel   = ASC(FeNUser.SecLevel)
  596.   User.Logons     = FeNUser.Logons
  597.   User.ScreenSize = FeNUser.ScreenSize
  598.   User.Uplds      = FeNUser.Uplds
  599.   User.Dnlds      = FeNUser.Dnlds
  600.   User.UserName   = FeNUser.UserName
  601.   User.MsgsPosted = FeNUser.MsgsPosted1
  602.   User.DLBytes    = FeNUser.DLBytes
  603.   User.ULBytes    = FeNUser.ULBytes
  604.   User.BirthDate  = FeNUser.BirthDate
  605.   PRINT User.UserName;" ";User.RealName
  606.   PUT #2,,User
  607.   IF INKEY$ = CHR$(27) THEN EXIT FOR
  608. NEXT
  609. CLOSE 1, 2
  610. END SUB
  611.  
  612.  
  613. SUB SFtoJDR
  614. OPEN "SFUSERS.DAT" FOR BINARY AS #1
  615. OPEN "USERS.HDR" FOR BINARY AS #2
  616. CALL InitNewUser
  617. FOR K0 = 1 TO LOF(1) \ 315
  618.   GET #1,,SFUser
  619.   User.UserName  = Adjust$(SFUser.LenUserName)
  620.   User.Password  = Adjust$(SFUser.LenPassword)
  621.   User.CityState = Adjust$(SFUser.LenCallingFrom)
  622.   User.SecLevel  = SFUser.SecurityLevel
  623.   User.Logons    = SFUser.TimesOn
  624.   User.Dnlds     = SFUser.Downloads
  625.   User.DLBytes   = SFUser.TotalDK * 1024&
  626.   User.Uplds     = SFUser.Uploads
  627.   User.ULBytes   = SFUser.TotalUK * 1024&
  628.   PRINT User.UserName;" ";User.RealName
  629.   PUT #2,,User
  630.   IF INKEY$ = CHR$(27) THEN EXIT FOR
  631. NEXT
  632. CLOSE 1, 2
  633. END SUB
  634.  
  635.  
  636.  
  637.  
  638. SUB RGtoJDR
  639.   OPEN "USERS.DAT" FOR BINARY AS #1
  640.   OPEN "USERS.HDR" FOR BINARY AS #2
  641.   CALL InitNewUser
  642.   GET #1,,RGUser                  'Skip past empty first record.
  643.   FOR K0 = 2 TO LOF(1) \ 1567
  644.     GET #1,,RGUser
  645.     User.UserName    = Adjust$(RGUser.LenAlias)      'Uppercase.
  646.     User.RealName    = Adjust$(RGUser.LenRealName)   'Mixed case.
  647.     IF UCASE$(User.RealName) = User.UserName _
  648.        THEN User.UserName = User.RealName
  649.     User.Password    = Adjust$(RGUser.LenPassword)
  650.     User.CityState   = Adjust$(RGUser.LenCityState)
  651.     User.SecLevel    = ASC(RGUser.SecLevel)
  652.     User.Logons      = RGUser.Logons
  653.     User.MsgsPosted  = RGUser.MsgsPosted
  654.     User.EMsgsPosted = RGUser.EMsgsPosted
  655.     User.FMsgsPosted = RGUser.FeedbackSent
  656.     User.Dnlds       = RGUser.Dnlds
  657.     User.DLBytes     = RGUser.DLBytesK * 1024&
  658.     User.Uplds       = RGUser.Uplds
  659.     User.ULBytes     = RGUser.ULBytesK * 1024&
  660.     User.HomePhone   = Adjust$(RGUser.LenPhone)
  661.     User.ScreenSize  = RGUser.PageLength
  662.     PRINT User.UserName;" ";User.RealName
  663.     PUT #2,,User
  664.     IF INKEY$ = CHR$(27) THEN EXIT FOR
  665.   NEXT
  666.   CLOSE 1, 2
  667. END SUB
  668.  
  669.  
  670. SUB RAtoJDR
  671. OPEN "USERS.BBS" FOR BINARY AS #1
  672. OPEN "USERS.HDR" FOR BINARY AS #2
  673. CALL InitNewUser
  674. FOR K0 = 1 TO LOF(1) \ 158
  675.   GET #1,,RAUser
  676.   User.UserName   = Adjust$(RAUser.LenName)
  677.   User.Password   = Adjust$(RAUser.LenPassword)
  678.   User.CityState  = Adjust$(RAUser.LenLocation)
  679.   User.SecLevel   = RAUser.Security
  680.   User.Logons     = RAUser.NoCalls
  681.   User.Dnlds      = RAUser.Downloads
  682.   User.DLBytes    = RAUser.DownloadsK * 1024&
  683.   User.Uplds      = RAUser.Uploads
  684.   User.ULBytes    = RAUser.UploadsK * 1024&
  685.   User.MinCredits = RAUser.Credit
  686.   User.MsgsPosted = RAUser.MsgsPosted
  687.   PRINT User.UserName;" ";User.RealName
  688.   PUT #2,,User
  689.   IF INKEY$ = CHR$(27) THEN EXIT FOR
  690. NEXT
  691. CLOSE 1, 2
  692. END SUB
  693.  
  694.  
  695. SUB FeNMsgToJDR
  696.   INPUT "Full path\filename to use (a MSGS file): ";K$
  697.   IF K$ = "" THEN EXIT SUB
  698.   INPUT "Message base number to use (1..n): ";K0
  699.   OPEN K$ FOR BINARY AS #1
  700.   OPEN "MESSAGES.HDR" FOR BINARY AS #3
  701.   OPEN "MESSAGES.BDY" FOR BINARY AS #4
  702.   CALL InitMsg
  703.   SEEK #3,LOF(3) + 1
  704.   SEEK #4,LOF(4) + 1
  705.   K& = 0
  706.   K$ = SPACE$(128)
  707.   GET #1,,K$    'Past conference info.
  708.   DO
  709.     GET #1,,FeNMsg
  710.     Message.MsgNum      = FeNMsg.MsgNum
  711.     Message.MsgFrom     = FeNMsg.MsgFrom
  712.     Message.MsgTo       = FeNMsg.MsgTo
  713.     Message.MsgSubject  = FeNMsg.MsgSubject
  714.     Message.MsgBase     = K0
  715.     MessageBody$ = ""
  716.     FOR K = 1 TO ASC(FeNMsg.MsgBlkSize)
  717.       GET #1,,K$
  718.       MessageBody$ = LEFT$(MessageBody$ + K$,16384)
  719.     NEXT
  720.     CALL ConvertChars(MessageBody$)
  721.     Message.NumOfBytes = LEN(MessageBody$)
  722.     Message.MsgLoc = K&
  723.     PUT #3,,Message
  724.     PUT #4,,MessageBody$
  725.     K& = K& + Message.NumOfBytes
  726.     PRINT Message.MsgFrom;" ";Message.MsgTo
  727.     IF INKEY$ = CHR$(27) THEN EXIT DO
  728.   LOOP UNTIL EOF(1)
  729.   CLOSE 1, 3, 4
  730. END SUB
  731.  
  732.  
  733. SUB SFMsgToJDR
  734. INPUT "Full path\filename to use [no extension] (a .PTR file): ";K$
  735. IF K$ = "" THEN EXIT SUB
  736. OPEN K$ + "PTR" FOR BINARY AS #1
  737. OPEN K$ + "DAT" FOR BINARY AS #2
  738. OPEN "MESSAGES.HDR" FOR BINARY AS #3
  739. OPEN "MESSAGES.BDY" FOR BINARY AS #4
  740. CALL InitMsg
  741. SEEK #3,LOF(3) + 1
  742. SEEK #4,LOF(4) + 1
  743. K& = 0
  744. DO
  745.   GET #1,,SFMsg
  746.   Message.MsgNum      = SFMsg.MsgNumber
  747.   Message.MsgFrom     = Adjust$(SFMsg.LenFromWho)
  748.   Message.MsgTo       = Adjust$(SFMsg.LenToWho)
  749.   Message.MsgSubject  = Adjust$(SFMsg.LenSubject)
  750.   Message.MsgBase     = SFMsg.Conference
  751.   MessageBody$ = ""
  752.   K$ = SPACE$(128)
  753.   FOR K = SFMsg.Where TO SFMsg.Where + SFMsg.NumberofRecords - 1
  754.     K0& = (K - 1) * 128& + 1
  755.     GET #2,K0&,K$
  756.     MessageBody$ = LEFT$(MessageBody$ + Adjust$(K$),16384)
  757.   NEXT
  758.   CALL ConvertChars(MessageBody$)
  759.   Message.NumOfBytes = LEN(MessageBody$)
  760.   Message.MsgLoc = K&
  761.   PUT #3,,Message
  762.   PUT #4,,MessageBody$
  763.   K& = K& + Message.NumOfBytes
  764.   PRINT Message.MsgFrom;" ";Message.MsgTo
  765.   IF INKEY$ = CHR$(27) THEN EXIT DO
  766. LOOP UNTIL EOF(1)
  767. CLOSE 1, 2, 3, 4
  768. END SUB
  769.  
  770.  
  771.  
  772.  
  773. SUB RGMsgToJDR
  774.  
  775.   PRINT "path\filename to import (a .HDR & .DAT file--no extension)"
  776.   INPUT ": ";K$
  777.   IF K$ = "" THEN EXIT SUB
  778.   INPUT "Message base number to use (1..n): ";K0
  779.   OPEN K$ + ".HDR" FOR BINARY AS #1
  780.   OPEN K$ + ".DAT" FOR BINARY AS #2
  781.   OPEN "MESSAGES.HDR" FOR BINARY AS #3
  782.   OPEN "MESSAGES.BDY" FOR BINARY AS #4
  783.   CALL InitMsg
  784.   SEEK #3,LOF(3) + 1
  785.   SEEK #4,LOF(4) + 1
  786.   K& = 0
  787.   K = 0
  788.   FOR K1 = 1 TO LOF(1) \ 326
  789.     GET #1,,RGMsg
  790.     K = K + 1
  791.     Message.MsgNum      = K
  792.     Message.MsgFrom     = Adjust$(RGMsg.FLenName)
  793.     Message.MsgTo       = Adjust$(RGMsg.TLenName)
  794.     Message.MsgSubject  = Adjust$(RGMsg.LenSubject)
  795.     Message.MsgBase     = K0
  796.     Message.SourceAddr  = MKI$(RGMsg.FZone) + MKI$(RGMsg.FNet) + MKI$(RGMsg.FNode)
  797.     IF Message.SourceAddr = STRING$(6,0) THEN Message.SourceAddr = SPACE$(6)
  798.     Message.DestAddr    = MKI$(RGMsg.TZone) + MKI$(RGMsg.TNet) + MKI$(RGMsg.TNode)
  799.     IF Message.DestAddr = STRING$(6,0) THEN Message.DestAddr = SPACE$(6)
  800.     IF RGMsg.MsgLength < 1 THEN RGMsg.MsgLength = 1
  801.     MessageBody$ = SPACE$(RGMsg.MsgLength - 1)
  802.     GET #2,RgMsg.TextPtr + 1,MessageBody$
  803.     MessageBody$ = LEFT$(MessageBody$,16384)
  804.     CALL ConvertChars(MessageBody$)
  805.     Message.NumOfBytes = LEN(MessageBody$)
  806.     Message.MsgLoc = K&
  807.     PUT #3,,Message
  808.     PUT #4,,MessageBody$
  809.     K& = K& + Message.NumOfBytes
  810.     PRINT Message.MsgFrom;" ";Message.MsgTo
  811.     IF INKEY$ = CHR$(27) THEN EXIT FOR
  812.   NEXT
  813.   CLOSE 1, 2, 3, 4
  814. END SUB
  815.  
  816.  
  817. SUB RAMsgToJDR
  818. OPEN "MSGHDR.BBS" FOR BINARY AS #1
  819. OPEN "MSGTXT.BBS" FOR BINARY AS #2
  820. OPEN "MESSAGES.HDR" FOR BINARY AS #3
  821. OPEN "MESSAGES.BDY" FOR BINARY AS #4
  822. CALL InitMsg
  823. SEEK #3,LOF(3) + 1
  824. SEEK #4,LOF(4) + 1
  825. K& = 0
  826. DO
  827.   GET #1,,RAMsg
  828.   Message.MsgNum      = RAMsg.MsgNum
  829.   Message.MsgFrom     = Adjust$(RAMsg.LenWhoFrom)
  830.   Message.MsgTo       = Adjust$(RAMsg.LenWhoTo)
  831.   Message.TimesRead   = RAMsg.TimesRead
  832.   Message.MsgSubject  = Adjust$(RAMsg.LenSubject)
  833.   Message.MsgBase     = ASC(RAMsg.Board) - 1
  834.   IF Message.MsgBase < 0 THEN Message.MsgBase = 0
  835.   Message.SourceAddr  = MKI$(ASC(RAMsg.OrigZone)) + MKI$(RAMsg.OrigNet) + MKI$(RAMsg.OrigNode)
  836.   IF Message.SourceAddr = STRING$(6,0) THEN Message.SourceAddr = SPACE$(6)
  837.   Message.DestAddr    = MKI$(ASC(RAMsg.DestZone)) + MKI$(RAMsg.DestNet) + MKI$(RAMsg.DestNode)
  838.   IF Message.DestAddr = STRING$(6,0) THEN Message.DestAddr = SPACE$(6)
  839.   MessageBody$ = ""
  840.   K$ = SPACE$(256)
  841.   FOR K = RAMsg.StartBlock TO RAMsg.StartBlock + RAMsg.NumBlocks - 1
  842.     K0& = K * 256& + 1
  843.     GET #2,K0&,K$
  844.     MessageBody$ = LEFT$(MessageBody$ + Adjust$(K$),16384)
  845.   NEXT
  846.   CALL ConvertChars(MessageBody$)
  847.   Message.NumOfBytes = LEN(MessageBody$)
  848.   Message.MsgLoc = K&
  849.   PUT #3,,Message
  850.   PUT #4,,MessageBody$
  851.   K& = K& + Message.NumOfBytes
  852.   PRINT Message.MsgFrom;" ";Message.MsgTo
  853.   IF INKEY$ = CHR$(27) THEN EXIT DO
  854. LOOP UNTIL EOF(1)
  855. CLOSE 1, 2, 3, 4
  856. END SUB
  857.  
  858.  
  859. SUB InitMsg
  860.   Message.Attr          = 0
  861.   Message.MsgNum        = 0
  862.   Message.MsgFrom       = ""
  863.   Message.MsgTo         = ""
  864.   Message.MsgDateSent   = 0
  865.   Message.MsgTimeSent   = 0
  866.   Message.MsgDateRcvd   = 0
  867.   Message.MsgTimeRcvd   = 0
  868.   Message.NumOfBytes    = 0
  869.   Message.NumberReplies = CHR$(0)
  870.   Message.TimesRead     = 0
  871.   Message.LastDateRead  = 0
  872.   Message.MsgSubject    = ""
  873.   Message.MsgBase       = 0
  874.   Message.Attr2         = 0
  875.   Message.SourceAddr    = SPACE$(6)
  876.   Message.DestAddr      = SPACE$(6)
  877.   Message.MsgLoc        = 0
  878. END SUB
  879.  
  880.  
  881. SUB InitNewUser
  882.   User.UserName      = "#NEWUSER"
  883.   User.Password      = ""
  884.   User.CityState     = ""
  885.   User.SysopNote     = -1
  886.   User.UserNote      = -1
  887.   User.BirthDate     = 0
  888.   User.SecLevel      = 5
  889.   User.FirstCall     = 0
  890.   User.Attr          = 0
  891.   User.Toggles       = - (2 + 16 + 32 + 2048 + 4096 + 8192)
  892.   User.Protocol      = "Z"
  893.   User.Votes         = STRING$(100,0)
  894.   User.SubsStart     = 0
  895.   User.Style         = ""
  896.   User.Language      = ""
  897.   User.ElapsedMinsC  = 0
  898.   User.ElapsedMins   = 0
  899.   User.LastCallerNum = 0
  900.   User.LastDateOn    = 0
  901.   User.PswdChange    = CHR$(0)
  902.   User.AlterDate     = 0
  903.   User.Toggles2      = 2
  904.   User.PRStuff       = STRING$(8,0)
  905.   User.Connect       = CHR$(0)
  906.   User.NewFilesPtr   = 0
  907.   User.HighestPtr    = 0
  908.   User.PagedSysop    = 0
  909.   User.Logons        = 0
  910.   User.Attempts      = CHR$(0)
  911.   User.MinCredits    = 0
  912.   User.MinMegs       = 0
  913.   User.MsgsPosted    = 0
  914.   User.EMsgsPosted   = 0
  915.   User.FMsgsPosted   = 0
  916.   User.NetMailSent   = 0
  917.   User.NetMailRcvd   = 0
  918.   User.Elapsed       = 0
  919.   User.Dnlds         = 0
  920.   User.DLBytes       = 0
  921.   User.MinsDLing     = 0
  922.   User.BadDLs        = 0
  923.   User.Uplds         = 0
  924.   User.ULBytes       = 0
  925.   User.MinsULing     = 0
  926.   User.BadULs        = 0
  927.   User.Doors         = 0
  928.   User.SubsEnd       = 0
  929.   User.HighNotePtr   = -1
  930.   User.TotalMonies   = 0
  931.   User.LastMonies    = 0
  932.   User.Attr2         = 0
  933.   User.BytesUToday   = 0
  934.   User.BytesUWeek    = 0
  935.   User.MsgsRcvd      = 0
  936.   User.EMsgsRcvd     = 0
  937.   User.SLSubsEnds    = 0
  938.   User.ScreenSize    = CHR$(0)
  939.   User.MsgRC         = ""
  940.   User.RealName      = "#NEWUSER"
  941.   User.HomePhone     = ""
  942.   User.BBSPhone      = ""
  943.   PUT #2,1,User
  944. END SUB
  945.  
  946.  
  947. FUNCTION Adjust$ (K$)
  948.   Adjust$ = MID$(K$,2,ASC(K$))
  949. END FUNCTION
  950.  
  951. SUB ConvertChars (K$)
  952.   FOR K = 1 TO LEN(K$)
  953.     SELECT CASE ASC(MID$(K$,K,1))
  954.       CASE 9  : MID$(K$,K,1) = " "
  955.       CASE 29 : MID$(K$,K,1) = "-"
  956.     END SELECT
  957.   NEXT
  958. END SUB
  959.  
  960.  
  961.  
  962.  
  963. '
  964. ' to compile: BC CONVERT.BAS /O/S/FS;
  965. ' to link   : LINK /EXEPACK /PACKCODE CONVERT;
  966. ' requires  : BC.EXE, LINK.EXE, BCL70EFR.LIB, BRT70EFR.LIB
  967. '             (Basic PDS 7.0+, although it should compile with other Basic's).
  968. '
  969.  
  970.